package com.saa.dept.service;


import com.saa.dept.dao.SaaDeptDao;
import com.saa.dept.po.SaaDept;
import com.saa.dept.vo.SaaDeptVo;
import com.saa.role.vo.SaaRoleDeptVo;
import com.saa.user.po.SaaUserDept;
import ins.framework.utils.Beans;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class SaaDeptService {
    public static final Logger logger = LoggerFactory.getLogger(SaaDeptService.class);
    @Autowired
    private SaaDeptDao saaDeptDao;

    /****递归进行机构数排列-人员***/
    public SaaDeptVo getSaaDepts(SaaDeptVo saaDeptVo, List<SaaDept> saaDepts,List<SaaUserDept> saaUserDepts){
        String id = saaDeptVo.getId();//父级ID
        List<SaaDeptVo> saaDeptVoList = new ArrayList<SaaDeptVo>();
        for(SaaDept saaDept:saaDepts){
            if(saaDept.getPid()!=null&&saaDept.getPid().toString().equals(id)){
                SaaDeptVo deptVo = new SaaDeptVo();
                Beans.copy().from(saaDept).to(deptVo);
                SaaDeptVo saaDeptVos  = this.getSaaDepts(deptVo,saaDepts,saaUserDepts);
                for(SaaUserDept saaUserDept:saaUserDepts){
                    if(deptVo.getId().equals(saaUserDept.getDeptId())){
                        deptVo.setIsSelected("1");
                    }
                }
                saaDeptVoList.add(saaDeptVos);
            }
        }
        if(saaDeptVoList.size()>0){
            saaDeptVo.setSubSaaDeptVos(saaDeptVoList);
        }
        return saaDeptVo;
    }
    /****递归进行机构数排列-角色***/
    public SaaDeptVo getSaaDeptsByRole(SaaDeptVo saaDeptVo, List<SaaDept> saaDepts,List<SaaRoleDeptVo> saaRoleDeptVos){
        String id = saaDeptVo.getId();//父级ID
        List<SaaDeptVo> saaDeptVoList = new ArrayList<SaaDeptVo>();
        for(SaaDept saaDept:saaDepts){
            if(saaDept.getPid()!=null&&saaDept.getPid().equals(id)){
                SaaDeptVo deptVo = new SaaDeptVo();
                Beans.copy().from(saaDept).to(deptVo);
                SaaDeptVo saaDeptVos  = this.getSaaDeptsByRole(deptVo,saaDepts,saaRoleDeptVos);
                for(SaaRoleDeptVo saaRoleDeptVo:saaRoleDeptVos){
                    if(deptVo.getId().equals(saaRoleDeptVo.getDeptId())){
                        deptVo.setIsSelected("1");
                    }
                }
                saaDeptVoList.add(saaDeptVos);
            }
        }
        if(saaDeptVoList.size()>0){
            saaDeptVo.setSubSaaDeptVos(saaDeptVoList);
        }
        return saaDeptVo;
    }
    /*****获取机构列表***/
    public SaaDeptVo getSaaDeptList(List<SaaUserDept> saaUserDepts){
        Map<String, Object> params = new HashMap<>();
        params.put("enabled",true);
        List<SaaDept> saaDepts = saaDeptDao.selectByEnabled(params);
        for(SaaDept saaDept :saaDepts){
            if(saaDept.getPid()==0l){//最上级总公司
                SaaDeptVo deptVo = new SaaDeptVo();
                Beans.copy().from(saaDept).to(deptVo);
                deptVo = this.getSaaDepts(deptVo,saaDepts,saaUserDepts);
                return deptVo;
            }
        }
        return null;
    }

    /****根据应用查询机构列表***/
    public SaaDeptVo getSaaDeptListByApplicationCode(List<SaaRoleDeptVo> saaRoleDeptVo){
        Map<String, Object> params = new HashMap<>();
        params.put("enabled",true);
        List<SaaDept> saaDepts = saaDeptDao.selectByEnabled(params);
        for(SaaDept saaDept :saaDepts){
            if(saaDept.getPid()==0l){//最上级总公司
                SaaDeptVo deptVo = new SaaDeptVo();
                Beans.copy().from(saaDept).to(deptVo);
                deptVo = this.getSaaDeptsByRole(deptVo,saaDepts,saaRoleDeptVo);
                return deptVo;
            }
        }
        return null;
    }
}
